using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Media;
using System.Windows;
using System.Windows.Input;
using AgilePlannerDT.Display.Events;

namespace AgilePlannerDT.Display
{
    public interface DisplayObject
    {
        #region Properties

        Point CenterAbsolute
        {
            get;
        }

        double Height
        {
            get;
        }

        long ID
        {
            get;
        }

        double LocationX
        {
            get;
        }

        double LocationY
        {
            get;
        }

        long ParentID
        {
            get;
            set;
        }

        double RotationAngle
        {
            get;
        }

        double Width
        {
            get;
        }

        #endregion

        #region Functions

        void AnimatedMoveTo(double targetX, double targetY);

        void AnimatedMoveTo(double targetX, double targetY, double targetRotationAngle);

        void AnimatedRotateTo(double targetRotationAngle);

        void BringToFront();

        bool Contains(Point p);

        void FadeIn();

        void FadeOut();

        Point[] GetCorners();

        void Highlight();

        void Move(double dx, double dy);

        void Move(double dx, double dy, double rotationAngle);
        
        void Resize(ref double dx, ref double dy);

        void Rotate(double rotationAngle);

        void Select();

        

        #endregion

        #region Event Handling

        void IndexCardDropped(DisplayObject sender, IndexCardDropEventArgs e);

        void ForwardMouseLeftButtonUp(MouseButtonEventArgs e);

        void ForwardMouseMove(MouseEventArgs e);

        

        #endregion

        #region MultiTouch Event
       
        void OnTouchDown(Point p);

        void OnTouchUp(Point p);

        void OnTouchMove(Point p);

        #endregion
    }
}
